package io;

import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;

/**
 * 实现简易的记事本程序
 * 程序启动后，可以在控制台陆续输入字符串，并将所有输入的字符串全部写入文件note.txt
 * 中，写入文件的字符串不需要考虑换行问题。
 * 当在控制台单独输入"exit"时，程序退出
 */
public class Test3 {
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);
        //覆盖模式；再次运行会抹除上次内容
        /*
        FileOutputStream fos = new FileOutputStream("note.txt");
        System.out.println("请开始输入内容，单独输入exit退出");
        while(true){
            String line = scanner.nextLine();//获取控制台输入的一行字符串
            if("exit".equals(line)){
                break;
            }
            byte[] data = line.getBytes(StandardCharsets.UTF_8);
            fos.write(data);
        }
        System.out.println("再见!");
        fos.close();

         */
        /*
            文件流创建时有两种模式可选:覆盖模式和追加模式
        FileOutputStream fos = new FileOutputStream("note.txt",true);追加模式
        FileOutputStream fos = new FileOutputStream("note.txt");覆盖模式

            默认创建时为覆盖模式
            覆盖模式:文件流创建时如果指定文件存在，会将该文件内容清空。
            覆盖模式:文件流创建时如果指定的文件存在则会保留原数据，并将新输入的内容追加到文件末尾。
            对应的构造器
            覆盖模式:
            FileOutputStream(String path)
            FileOutputStream(File file)

            追加模式:
            FileOutputStream(String path,boolean append)
            FileOutputStream(File file,boolean append)
            当第二个参数为true时，则为追加模式
         */
        //追加模式
        FileOutputStream fos = new FileOutputStream("note.txt",true);
        System.out.println("请开始输入内容，单独输入exit退出");
        while(true){
            String line = scanner.nextLine();//获取控制台输入的一行字符串
            if("exit".equals(line)){
                break;
            }
            byte[] data = line.getBytes(StandardCharsets.UTF_8);
            fos.write(data);
        }
        System.out.println("再见!");
        fos.close();
    }
}
